草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 在基类和派生类中 copy-and-swap

我最近读到copy&swap现在我正在尝试在基类和派生类中实现ctors。我的基类和派生类中都有四个构造函数,但是我不确定如何实现派生类的赋值运算符。explicitBase(inti):m_i{i}{}Base(constBase&other):m_i{other.m_i}Base(Base&&other):Base(0){swap(*this,other);}Base&operator=(Baseother){swap(*this,other);return*this;}friendvoidswap(Base&a,Base&b)noexcept{usingstd::swap;swa

c++ - 抽象基类c++的析构函数和无构造函数

我搜索过这个,但我并没有真正理解答案。我是C++的新手,我想要实现的是拥有一个抽象类作为我的对象类型的基类,这样我就可以将我的对象存储在抽象类型的指针数组中类而不是使用void*。此外,我的对象共享一些公共(public)成员函数,这些函数可以通过抽象类实现轻松减少我的代码库。但是,我对抽象类的构造函数和析构函数感到困惑。抽象类实际上并不需要构造函数,因为可以传入的参数对于两者都是通用的,需要对派生类中的所述参数做不同的事情才能正确设置protected属性(矩阵的大小).那么,没有构造函数可以吗?另外,由于我没有构造函数,析构函数应该是什么?我说的是实现虚拟析构函数的答案。但是,我不

c++ - 在C++单元测试上下文中,抽象基类是否应具有其他抽象基类作为函数参数?

我尝试为我们的C++遗留代码库实现uni测试。我通读了MichaelFeathers的“有效处理遗留代码”,并了解了一些如何实现我的目标的想法。我使用GooleTest/GooleMock作为框架,并且已经实现了一些涉及模拟对象的测试。为此,我尝试了“提取接口(interface)”方法,这种方法在一种情况下效果很好:classMyClass{...voidMyFunction(std::shared_ptrparameter);}成为:classMyClass{...voidMyFunction(std::shared_ptrparameter);}我在生产中通过了ProdMyOth

c++ - c++基类中 protected 字段的问题

我有一个基类,比如说BassClass,它有一些字段,我让它们受到保护,还有一些纯虚函数。然后是派生类,例如DerivedClass,例如classDerivedClass:publicBassClass。DerivedClass不应该继承BassClass的protected字段吗?当我尝试编译DerivedClass时,编译器提示DerivedClass没有任何这些字段,这里有什么问题?谢谢 最佳答案 如果BassClass(sic)和DerivedClass是模板,并且要从DerivedClass访问的BassClass成员>

c++ - 是否可以拥有来自同一基类的不同对象的数组?

我正在尝试为游戏设计武器类别。这是我为满足我的需要而编写的一些代码:classweapon{public:intfireRate;intbulletDamage;intrange;ofImagesprite;ofImagebulletSprite;bulletbullets[50];intactiveBullet;public:voidfire();};classmachineGun:publicweapon{public:voidfire();};classflamer:publicweapon{public:voidfire();};然后我想像这样定义一个武器数组://Weapon

c++ - 显式调用基类析构函数/构造函数是否合法?

就地析构和构造基类对象以重置基类已知的状态部分是否合法?classC:publicBaseClass{...};Cc;c.BaseClass::~BaseClass();new(static_cast(&c))BaseClass;如果我们可以访问类的源代码,显然还有其他方法可以实现此效果。但是,我想从语言的角度了解是否有特定原因导致这无效。 最佳答案 不,这是不合法的。不允许替换对象的基础子对象。C++113.8/7指定只有在以下情况下才能重用对象的存储theoriginalobjectwasamostderivedobject(1

c++ - operator const Base&() 是否应该用于不可访问的基类?

我希望有一个类允许访问其基本情况的const接口(interface),但不允许访问其他类。特别是:classB{};classA:privateclassB{public:operatorconstB&(){return*this;}};intmain(){Aa;constB&b=a;//Shouldthislinebeanerror?}g++给出了一个不可访问的基类错误。你们那里的语言专家认为这个错误在C++11/C++14中是正确的吗?是的,我意识到我可以(并且将会)这样做:intmain(){Aa;constB&b=a.operatorconstB&();}对这个构造的另一种方

c++ - 为什么我不能从派生类中调用基类运算符?

考虑这段代码,它试图从派生类运算符调用基类比较运算符:structBase{protected:int_a;booloperator==(constBase&other)const{return(_a==other._a);}};structDerived:publicBase{booloperator==(constDerived&other)const{returnstatic_cast(*this)==static_cast(other);}};intmain(){Derivedb1,b2;if(b1==b2);}这失败了:main.cpp:25:61:error:'boolBa

c++ - 是否可以从一个基类动态转换到另一个基类?

比如我有这样的代码classBase1{virtualvoidwonderFULL()=0;};classBase2{//allthisweirdmembers};classDerived:publicBase1,publicBase2{//notsoweirdmembers};intmain(){DerivedWonder;magicFunction(&Wonder);return0;}voidmagicFunction(Base2*ptr){if(Base1*b1=dynamic_cast(ptr))b1->wonderFULL();}然而,由于无法将ptr转换为b1,因此永远不会

c++ - 如何在模板基类中调用模板成员函数?

在基类中调用非模板化成员函数时,可以将其名称通过using导入到派生类中,然后使用它。这是否也适用于基类中的模板成员函数?仅使用using它不起作用(使用g++-snapshot-20110219-std=c++0x):templatestructA{templatevoidf(){}};templatestructB:A{usingA::f;templatevoidg(){//g++throwsanerrorforthefollowingline:expectedprimaryexpressionbefore`>`f();}};intmain(){Bb;b.g();}我知道像在中那样